package br.ufscar.acumaaf.smc;

import br.ufscar.acumaaf.smc.dao.UsuarioDAO;
import br.ufscar.acumaaf.smc.model.Usuario;
import br.ufscar.acumaaf.smc.persistence.DataBaseHelper;
import br.usfacar.acumaaf.smc.webservice.RestClientGrupoAtividadeFisica;
import br.usfacar.acumaaf.smc.webservice.RestClientMatricula;
import br.usfacar.acumaaf.smc.webservice.RestClientSessao;
import br.usfacar.acumaaf.smc.webservice.RestClientUsuario;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Looper;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class SMCActivity extends Activity{
    
	private DataBaseHelper dataBaseHelper;
	private SQLiteDatabase db;
	private Integer codigoUsuarioAutenticado;
	private ProgressDialog dialog;
	
	/** Called when the activity is first created. */	
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	
    	//Cria o Banco de Dados da aplicação caso ele não exista no dispositivo do Usuário
        dataBaseHelper = new DataBaseHelper(this);
        Log.i(DataBaseHelper.FILTRO,"SMCActivity:onCreate | Abrindo o Banco de Dados - Tela Login!");   
        db = dataBaseHelper.getReadableDatabase();
        
        super.onCreate(savedInstanceState);
        //Chama a tela de login
        setContentView(R.layout.login);
        
        //Criação do Alerta para falha na conexão com a internet
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Falha na Sincronização!");
        builder.setMessage("Nem todos os dados foram sincronizados com o SIAF! Verifique sua conexão com a internet...");
        builder.setCancelable(false);
        builder.setIcon(R.drawable.alerticon_48x48);
        
        builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int which) {
				dialog.cancel();				
				//Chamando a tela Home
				Intent i = new Intent("CHAMA_ACTIVITY_HOME");
	   			startActivity(i);
	   			finish();
			}
		});      
               
        //Captura os campos de usuario e senha
        final EditText usuario = (EditText) findViewById(R.id.login_edittext_usuario);
        final EditText senha = (EditText) findViewById(R.id.login_edittext_senha);
               
        Button acessar = (Button) findViewById(R.id.login_button_acessar);
        acessar.setOnClickListener(new Button.OnClickListener(){
        	public void onClick(View v){
           		String user = usuario.getText().toString();
           		String pass = senha.getText().toString();
           		//Tenta conferir o cadastro do usuário no Banco de Dados para autenticá-lo
           		codigoUsuarioAutenticado = new UsuarioDAO(getApplicationContext()).buscarUsuarioPeloUsuarioSenha(user, pass);
           		if (user.equals("admin") && pass.equals("admin")){
           			codigoUsuarioAutenticado = 1;
           		}
           		if(!codigoUsuarioAutenticado.equals(0)){
           			Usuario u = new UsuarioDAO(getApplicationContext()).buscarUsuarioPeloCodigo(codigoUsuarioAutenticado);
           			Log.i(DataBaseHelper.FILTRO,"SMCAtivity:logar | Usuário = " + u.getNome() + " Autenticado com sucesso!");
           			
           			dialog = ProgressDialog.show(SMCActivity.this, "Sincronizando", "Sincronizando dados com o SIAF. Por favor aguarde...!", true);
           			//Thread que sincroniza as tabelas do SMC com o SIAF
           			new Thread(){
           				public void run(){
           					Looper.prepare();
           					boolean retornoGrupoAtividadeFisica = RestClientGrupoAtividadeFisica.getDadosTabelaGrupoAtividadeFisicaSiaf(getApplicationContext());
           					boolean retornoMatriculaUsuarioGrupoAtividadeFisica = RestClientMatricula.getDadosTabelaMatriculaUsuarioGrupoAtividadeFisicaSiaf(getApplicationContext());
           					boolean retornoSessao = RestClientSessao.getDadosTabelaSessaoSiaf(getApplicationContext());
           					boolean retornoUsuario = RestClientUsuario.getDadosTabelaUsuarioSiaf(getApplicationContext());
           					//Se a sincronização não foi realizada (retorno = false)
           					Log.i("smc","SMCActivity:BotaoAcessar | Retorno do método de getSincronizacao. RetornoGrupoAtividadeFisica = " + retornoGrupoAtividadeFisica);
           					Log.i("smc","SMCActivity:BotaoAcessar | Retorno do método de getSincronizacao. RetornoMatriculaUsuarioGrupoAtividadeFisica = " + retornoMatriculaUsuarioGrupoAtividadeFisica);
           					Log.i("smc","SMCActivity:BotaoAcessar | Retorno do método de getSincronizacao. RetornoSessao = " + retornoSessao);
           					Log.i("smc","SMCActivity:BotaoAcessar | Retorno do método de getSincronizacao. RetornoUsuario = " + retornoUsuario);
           					if(!(retornoUsuario && retornoSessao && retornoGrupoAtividadeFisica && retornoMatriculaUsuarioGrupoAtividadeFisica)){
           						Log.i("smc","SMCActivity:BotaoAcessar | Entrou na condicional que chama o alertDialog!");
           						//Fechando o dialog
               					dialog.dismiss();
               					builder.show();
               		   			Looper.loop();
           					}
           					else{
	           					//Fechando o dialog
	           					dialog.dismiss();
	       						//Chamando a tela Home
	           					Intent i = new Intent("CHAMA_ACTIVITY_HOME");
	           		   			startActivity(i);
	           		   			finish();
	           		   			Looper.loop();
           					}	
           				}	
           			}.start();
           		}
           		else{
           			Toast.makeText(getApplication(), "Usuário/Senha incorreto. O acesso não foi autorizado!", Toast.LENGTH_SHORT).show();
           		}
        	}
        });
        
        Button cancelar = (Button) findViewById(R.id.login_button_cancelar);
        cancelar.setOnClickListener(new Button.OnClickListener(){
        	public void onClick(View v){
        		//Sai da aplicação e encerra a Activity
        		finish();
        	}
        });
        
    }//fim do método onCreate()
    
    protected void onDestroy() {
    	super.onDestroy();
    	Log.i(DataBaseHelper.FILTRO,"SMCActivity:onDestroy | Fechando o Banco de Dados - Tela Login!");
    	dataBaseHelper.close();
    	db.close();
    }
 }